package com.liu.frame.utils;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import java.util.ArrayList;
import java.util.List;

import static android.icu.lang.UCharacter.GraphemeClusterBreak.T;

/**
 * Created by 刘智强 on 2016/10/25.
 */

public class GsonUtils {
    private static Gson gson = new Gson();

    /**
     * 解析成集合
     *
     * @param json
     * @param clazz
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> List<T> fromJsonArray(String json, Class<T> clazz) throws Exception {
        List<T> lst = new ArrayList<T>();

        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
        for (final JsonElement elem : array) {
            lst.add(new Gson().fromJson(elem, clazz));
        }
        return lst;
    }


    /**
     * 把json字符串解析成Bean
     *
     * @param json
     * @param clazz
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> T fromJson(String json, Class<T> clazz) throws Exception {
        T tClass = new Gson().fromJson(json, clazz);
        return tClass;
    }

    /**
     * 把Bean转成Json字符串
     *
     * @param o
     * @return
     */

    public static String toJson(Object o) {
        String jsonStrong = new Gson().toJson(o);
        return jsonStrong;

    }

    /**
     * 获取json字符串中特定key的json字符串
     *
     * @param json json字符串
     * @param key  键
     * @return
     */
    public static String json2String(String json, String key) {
        String value = null;
        JSONTokener jsonTokener = new JSONTokener(json);
        JSONObject jsonObject = null;
        try {
            jsonObject = (JSONObject) jsonTokener.nextValue();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        value = jsonObject.optString(key);

        return value;
    }


}
